package office.word.spire.doc;

import com.spire.doc.*;
import com.spire.doc.documents.DocumentObjectType;
import com.spire.doc.documents.Paragraph;

/**
 * @author zhanglu
 * @project JavaBase
 * @description
 * @date 2023/6/5 19:01
 */
public class HtmlWordTest {

    public static void main(String[] args) {
//        String source = "/Users/zhanglu/Desktop/tmp/spire/source.docx";
        String target = "/Users/zhanglu/Desktop/tmp/spire/2.html";

        //word转html
//        Document document = new Document();
//        document.loadFromFile(source);
//        document.setHTMLSentenceIdentifier(true);
//        document.setEmbedSystemFonts(true);
//        document.setEmbedFontsInFile(true);
//        document.saveToFile(target, FileFormat.Html);

        //html 图片样式内置处理
//        File file = new File(target);
//        String html = FileUtil.readUtf8String(file);
//        org.jsoup.nodes.Document parse = Jsoup.parse(html);
//        List<String> styles = new ArrayList<>();
//        for (Element link : parse.getElementsByTag("link")) {
//            String href = link.attr("href");
//            if(StrUtil.endWith(href, ".css")){
//                styles.add(file.getParent() + File.separator + href);
//                link.remove();
//            }
//        }
//        StringBuilder styleHtml = StrUtil.builder();
//        for (String style : styles) {
//            styleHtml.append(FileUtil.readUtf8String(style));
//        }
//        Elements styleTag = parse.getElementsByTag("head");
//        styleTag.append(StrUtil.format("<style>\r\n{}\r\n</style>", styleHtml.toString()));
//        for (Element img : parse.getElementsByTag("img")) {
//            String src = img.attr("src");
//            img.attr("src", "data:image/jpeg;base64,"
//                    + Base64.encode(new File(file.getParent() + File.separator + src)));
//        }
//        target = "/Users/zhanglu/Desktop/tmp/spire/2s.html";
//        FileUtil.writeUtf8String(parse.html().replace("\uFEFF", ""), target);

        s1();

//        //html转docx
//        Document doc = new Document();
//        //加载html文件
//        doc.loadFromFile("/Users/zhanglu/Desktop/tmp/spire/3.html",FileFormat.Html);
//        //保存为XML格式
//        doc.saveToFile("/Users/zhanglu/Desktop/tmp/spire/3sss.xml", FileFormat.Word_Xml);
//        doc = new Document();
//        //加载html文件
//        doc.loadFromFile("/Users/zhanglu/Desktop/tmp/spire/3sss.xml",FileFormat.Word_Xml);
//        //保存为XML格式
//        doc.saveToFile("/Users/zhanglu/Desktop/tmp/spire/3sss.doc", FileFormat.Doc);

//        //书签塞值
//        Map<String, Object> m = new HashMap<>();
//        m.put("field01", "v1");
//        m.put("field02", "v2");
//        m.put("field03", "v3");
//        m.put("field04", "v4");
//        Document doc = new Document();
//        doc.loadFromFile("/Users/zhanglu/Desktop/tmp/spire/source.docx");
//        m.forEach((k, v) -> {
//            try {
//                //定位到书签"SimpleBookmark"
//                BookmarksNavigator bookmarkNavigator = new BookmarksNavigator(doc);
//                bookmarkNavigator.moveToBookmark(k);
//                TextBodyPart bookmarkContent = bookmarkNavigator.getBookmarkContent();
//                //使用文本替换原书签的内容, false表示不保留原来的格式
//                bookmarkNavigator.replaceBookmarkContent(v.toString(), true);
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        });
//        //保存文档
//        doc.saveToFile("/Users/zhanglu/Desktop/tmp/spire/target.docx", FileFormat.Docx);

//        //html转docx
//        Document doc = new Document();
//        doc.loadFromFile("/Users/zhanglu/Desktop/tmp/spire/source.docx", FileFormat.Docx);
//        doc.saveToFile("/Users/zhanglu/Desktop/tmp/spire/444.html", FileFormat.Html);
    }


    public static void s1(){
        String source = "/Users/zhanglu/Desktop/副本8d86ba899c67ab387cc80389c1fd18cc.docx";
        Document document = new Document();
        document.loadFromFile(source);
        for (Object o : document.getSections()) {
            Section section = (Section) o;
            for (int k = 0; k < section.getBody().getChildObjects().getCount(); k++) {
                if (section.getBody().getChildObjects().get(k).getDocumentObjectType() == DocumentObjectType.Paragraph) {
                    Paragraph p = (Paragraph)section.getBody().getChildObjects().get(k);
                    //获取段落样式名称
                    String styleName = p.getStyle().getName();
                    String styleId = p.getStyle().getStyleId();
//                    System.out.println("段落样式名称："+styleName);
//                    System.out.println(p.getClass());
                    if(Integer.valueOf(styleId) >=2 && Integer.valueOf(styleId) <= 10){
                        System.out.println(p.getText() + " : " + p.getStyleName() + " : " + styleId);
                    }

                    //遍历段落
                    for (int j = 0; j < p.getChildObjects().getCount(); j++) {
                        if (p.getChildObjects().get(j).getDocumentObjectType() == DocumentObjectType.Shape) {
//                            System.out.println("这个段落的子对象是形状");
                        }
                        if (p.getChildObjects().get(j).getDocumentObjectType() == DocumentObjectType.Picture) {
//                            System.out.println("这个段落的子对象是图片");
                        }
                        if (p.getChildObjects().get(j).getDocumentObjectType() == DocumentObjectType.Text_Range) {
//                            System.out.println("这个段落的子对象是文本");
                        }
                        if (p.getChildObjects().get(j).getDocumentObjectType() == DocumentObjectType.TOC) {
//                            System.out.println("这个段落的子对象是目录");
//                            System.out.println(p.getChildObjects().get(j));
                        }
                    }
                }
                if(section.getBody().getChildObjects().get(k).getDocumentObjectType() == DocumentObjectType.Table) {
                    Table table = (Table)section.getBody().getChildObjects().get(k);
//                    System.out.println("这是表格");
                }
            }
        }


    }

}

